package edu.cuit.avatar.collection;

import java.util.ArrayList;
import java.util.List;

/**
 * 什么是fast-fail机制及工作原理
 *    fast-fail机制是java集合框架中的错误检测机制，当多个线程对集合进行结构上的修改(添加元素,删除元素)
 *    或者在单线程环境下通过迭代遍历集合时直接修改集合内容(不是通过迭代器方法),就会抛出ConcurrentModificationException
 * 工作原理:
 *      集合内部维护了modCount(修改计数器)变量
 *          每次对集合的结构进行修改时, modCount++
 *          当创建迭代器的时候，迭代器会记录当前的modCount值 ====> expectedModCount
 *          每次调用迭代器的next()或remove()方法时,会检测 modCount == expectedModCount
 *          如果不等，则会抛出ConcurrentModificationException
 * @author <a href="mailto:1020zhaodan@163.com">Adan</a>
 * @version 1.0
 * @date 2025/7/14 16:30
 */
public class FastFailTest {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        names.add("peppa");
        names.add("jorge");
        names.add("jorge");
        names.add("pedro");

        var iterator = names.iterator();
        while(iterator.hasNext()){
            var name = iterator.next();
            if("jorge".equals(name))
                //直接使用集合的remove方法而非迭代器的remove
                names.remove(name); //ConcurrentModificationException
                //iterator.remove();
        }
        System.out.println(names);
    }
}
